// 时间格式处理
import moment from 'moment'

const radixMap = {
  day: 1000 * 60 * 60 * 24,
  hour: 1000 * 60 * 60,
  minute: 1000 * 60,
  second: 1000,
}
const week = ['星期日', '星期一','星期二', '星期三', '星期四', '星期五', '星期六']
/**
 * 判断是否是日期类型的数据
 * @param dateToCheck - 待判断的数据
 * @return {boolean}
 */
function typeofDate(dateToCheck) {
  return Object.prototype.toString.call(dateToCheck) === '[object.Date]'
}
export default {
  /**
   * 将时间转成字符串,具体到秒
   * @param {string,Date}value - 日期
   * @param {string} formatStr - 转换的格式,非必填
   * @return {string}
   */
  dateTimeFormat(value, formatStr = 'YYYY-MM-DD HH:mm:ss') {
    if (!value) return ''
    return moment(value).format(formatStr)
  },
  /**
   * 将时间转成字符串,仅到日期
   * @param {string, Date} value - 日期
   * @param {string} formatStr - 转换的格式
   * @return {string}
   */
  dateFormat(value, formatStr = 'YYYY-MM-DD') {
    if (!value) return ''
    return moment(value).format(formatStr)
  },
  /**
   * 将字符串转成时间
   * @param value
   * @return {moment.Moment|string}
   */
  dateParse(value) {
    if (!value) return ''
    return moment(value)
  },
  /**
   * 计算两时间的间隔
   * @param date1 - 日期
   * @param date2 - 日期
   * @param fixed {number} - 小数位 四舍五入
   * @param units {String} - 单位 包含有 day,hour,minute,second
   * @param abs {boolean} - 是否只取正
   *
   */
  dateDuration(date1, date2, {fixed = 0, units = 'hour', abs= true},) {
    console.log(this)
    let _date1 = typeofDate(date1) ? date1 : new Date(date1),
      _date2 = typeofDate(date2) ? date2 : new Date(date2)
    let radix = radixMap[units]
    if(!radix){
      throw new Error('进制不存在!')
    }
    return abs ? Math.abs(((_date2.getTime() - _date1.getTime()) / radix).toFixed(fixed)) :  ((_date2.getTime() - _date1.getTime()) / radix).toFixed(fixed)
  },
  /**
   * 获取时间所属的星期
   * @param date - 日期
   * @return {string} 星期
   */
  getWeek(date){
    if(Object.prototype.toString.call(date) === '[object Date]'){
      return week[date.getDay()]
    }else{
      return week[new Date(date).getDay()]
    }

  },
  /**
   *   获取某年/月的第一天
   *   @param year 年份,选填
   *   @param month 月份,选填
   */
  getFirstDay(year, month) {
    let $year, $month
    if (!year instanceof Number)
      $year = new Date().getFullYear()
    if (!month instanceof Number)
      $month = new Date().getMonth() + 1
    // 月份是从0开始的,因此要-1
    return new Date($year, $month - 1, 1)
  },

}
